package com.itany.nmms.service;

import com.itany.nmms.entity.Dept;
import com.itany.nmms.entity.Staff;
import com.itany.nmms.exception.DeptExistException;
import com.itany.nmms.exception.DeptStatusErrorException;
import com.itany.nmms.exception.LoginDisabledException;
import com.itany.nmms.exception.RequestParamErrorException;

import java.util.List;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/8/8 13:32
 * Version:1.0-SNAPSHOT
 * Description:
 */
public interface DeptService {

    /**
     * 添加一级部门
     * @param name      部门名
     * @param remark    部门职能
     * @param staff     部门创建人
     */
    public void addDept(String name, String remark, Staff staff) throws RequestParamErrorException, LoginDisabledException, DeptExistException;

    /**
     * 添加子部门
     * @param fatherId  所属的上级部门id
     * @param name      部门名
     * @param remark    部门职能
     * @param staff     部门创建人
     */
    public void addSonDept(String fatherId,String name, String remark, Staff staff) throws RequestParamErrorException, LoginDisabledException, DeptExistException;

    /**
     * 部门列表
     * @return
     */
    public List<Dept> findAll();

    /**
     * 修改设置默认值
     * @param id
     * @return
     */
    public Dept findById(String id) throws RequestParamErrorException;

    /**
     * 修改部门信息
     * @param id
     * @param name
     * @param remark
     */
    public void modifyDept(String id,String name,String remark) throws RequestParamErrorException, DeptExistException;

    /**
     * 禁用部门
     * 同时禁用该部门下的所有子孙部门
     * @param id
     */
    public void disableDept(String id) throws RequestParamErrorException;

    /**
     * 启用当前部门
     * @param id
     */
    public void enableDept(String id) throws RequestParamErrorException, DeptStatusErrorException;

    /**
     * 查询所有有效的部门信息
     * @return
     */
    public List<Dept> findEnable();
}
